import FileListItem from "../domain/FileListItem";

export default interface Driver {

    /**
     * 查询全部文件列表
     * 
     * @param path 文件路径
     */
    list(path: string): Promise<Array<FileListItem>>;

    /**
     * 新建文件夹
     * 
     * @param name 文件夹名
     * @param path 文件路径
     */
    mkdir(name: string, path: string): Promise<void>;

    /**
     * 重命名文件
     * 
     * @param name 旧的文件名
     * @param newName 新的文件名
     * @param path 文件所在目录
     */
    rename(name: string, newName: string, path: string): Promise<void>;

    /**
     * 删除文件
     * 
     * @param path 文件路径，绝对路径
     */
    rm(path: string): Promise<void>;

    /**
     * 复制文件
     * @param path 文件路径
     * @param destination 目的地
     */
    copyFile(path: string, destination: string): Promise<void>;

    /**
     * 移动文件
     * @param path 文件路径
     * @param destinationPath 目的地路径
     */
    moveFile(path: string, destinationPath: string): Promise<void>;

    /**
     * 读取文件文本
     * @param path 文件所在绝对路径
     */
    readText(path: string, progress?: (current: number, total: number) => void): Promise<string>;

    /**
     * 写入文本
     * @param path 文件所在绝对路径
     * @param content 文件内容
     * @param append 是否是追加写入
     */
    writeText(path: string, content: string, append: boolean, progress?: (current: number, total: number) => void): Promise<boolean>;

    /**
     * 读取文件
     * @param path 文件所在绝对路径
     */
    read<T>(path: string, progress?: (current: number, total: number) => void): Promise<T>;

    /**
     * 写入文件
     * @param path 文件所在绝对路径
     * @param content 文件内容
     */
    write<T>(path: string, content: T, progress?: (current: number, total: number) => void): Promise<boolean>;

    /**
     * 获取文件下载地址（webdav、七牛云等可以通过链接访问的有效）
     * 
     * @param path 文件路径
     */
    getFileDownloadLink(path: string): string;

}